package Test03;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

//方法引用：引用构造方法
/*
    方法引用(引用构造方法）
        格式
            类名::new
        目的:
            创建这个类的对象

        方法引用的规则:
        1.需要有函数式接口
        2.被引用的方法必须已经存在
        3.被引用方法的形参和返回值，需要跟抽象方法的形参返回值保持一致
        4.被引用方法的功能需要满足当前的需求
 */
public class Test05 {
    public static void main(String[] args) {
        /*需求:
            集合里面存储姓名和年龄，要求封装成Student对象并收集到List集合中
         */

        //1、创建集合对象
        ArrayList<String> list = new ArrayList<>();
        //2、添加数据
        Collections.addAll(list, "张无忌,15", "周芷若,14", "赵敏,13", "张强,20", "张三丰,100", "张翠山,40", "张良,35", "王二麻子,37");
        //3、封装成Student对象并收集到List集合中
        //String --> Student
        /*//常规方法
        List<Student05> newList = list.stream().map(new Function<String, Student05>() {
            @Override
            public Student05 apply(String s) {
                String[] arr = s.split(",");
                String name = arr[0];
                int age = Integer.parseInt(arr[1]);
                return new Student05(name, age);
            }
        }).collect(Collectors.toList());*/

        //方法引用
        List<Student05> newList = list.stream().map(Student05::new).collect(Collectors.toList());
        System.out.println(newList);
    }
}

class Student05 {

    private String name;
    private int age;

    public Student05() {

    }

    public Student05(String str) {
        String[] arr = str.split(",");
        this.name = arr[0];
        this.age = Integer.parseInt(arr[1]);
    }

    public Student05(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student05{name = " + name + ", age = " + age + "}";
    }
}
